<?php

namespace app\api\controller\robat;

use app\api\controller\Base;
use app\api\controller\pub\Yhpcsoftasr;
use app\api\controller\pub\Siliconflow;
use app\common\model\apiinput\Apishuqicalllistpush;
use app\common\model\apiinput\Apishuqicalldidsession;
use app\common\model\customer\Customervisit;
use think\facade\Request;
use app\api\controller\Pub;

class Shuqi extends Base
{
    /**
     * 数企 api对接
     * 目前：获取话单信息
     * 7001 开发者呼叫频次管控 02 应用呼叫频次 03 固话号码呼叫频次 04 黑名单呼叫管控  
     * 7108 用户状态冻结 8003 振铃超时  04 振铃挂机 09 接通前主叫挂机 10超过通话时长 8100 被叫号码不存在 
     * 8101 被叫无应答 02用户正忙 03暂时无法接通 04已关机 05被叫挂机或被叫已停机 9999其他异常
     */


    public function initialize()
    {
        // parent::initialize();
        // $this->app_key = get_config_value('call_center_app_key');
        // $this->code = get_config_value('call_center_code');
    }

     /**
     * 通话结果的did 更换为seesionid
     * @return [type] [description]
     */
    public function call_did_sessionId(){
        $data = Apishuqicalldidsession::limit(100)->select();
        if(empty($data)){
            return serr('无需更新');
        }
        foreach ($data as $key => $value) {
            $cv = new Customervisit;
            $cv = $cv->where('CallsessionId',$value['callId'])->find();
            if(!empty($cv)){
                $cv->CallsessionId = $value['sessionId'];
                $cv->save();
            }
            $value->delete();
        }
        return sok('更新成功');
    }

    //将录音信息转为对话文本
    public function call_list_asr_phone(){
        set_time_limit(1000);
        $nsq = new Apishuqicalllistpush;
        $data = $nsq->where('status',3)->where('callContent',null)->where('disconnectTime','<',date('Y-m-d H:i:s',time()-600))->order('timeConsume asc')->limit(10)->select();
        $yasr = new Yhpcsoftasr();
        foreach ($data as $key => $value) {
            $info = $yasr->phone($value['recordUrl']);
            if(!$info['code']){
                return serr($info['msg']);
            }
            $value->callContent =  json_encode($info['msg']);
            $value->save();
        }
        return sok('已操作'.count($data).'条数据');
    }


    //将录音信息转为对话文本
    public function call_list_chat_summary(){
        set_time_limit(1000);
        $nsq = new Apishuqicalllistpush;
        $data = $nsq->where('status',3)->where('callContent','not null')->where('summaryContent',null)->limit(10)->select();
        $sf = new Siliconflow();
        $first ="
            你是一名经验丰富的销售总监，擅长从销售与客户的通话中提取关键信息，并制定高效的客户回访策略。
            背景: 
             - 销售公司: 越华鹏诚数字科技（山东）有限公司
             - 销售产品: 危废电子标签打印一体机
             - 产品背景: 根据国家生态环境标准《危险废物识别标志设置技术规范》的公告，危险废物环境重点监管单位，应采用电子地磅、电子标签、电子管理台账等技术手段对危险废物贮存过程进行信息化管理，确保数据完整、真实、准确。
             - 产品简介: “危废电子标签打印一体机”是一套智能化危险废物管理软硬件结合系统。本系统可以连接地磅记录危废的重量，填写相关信息后即可生成对应的符合国家规定的电子标签和纸质标签。同时可以记录危废的出入库情况，生成对应台账。通过自动化管理，减少人工操作的繁琐和错误率，提高危废管理的效率。
             - 目标客户: 产废单位的环保负责人

            任务: 请根据以下提供的销售与客户通话内容，整理关键信息，并生成一份专业的客户回访记录。
            注意: 由于个人说话的发音习惯，通话记录中的个别词或句子可能存在错误，请根据你的理解纠正它。

            回访记录模板:
             - 通话状态: (未接通/无效沟通/有效沟通)
             - 客户需求/痛点:
             - 客户反馈/疑虑:
             - 回访方式: (电话/微信/面谈)
             - 回访目标:
             - 回访话术要点:
             - 备注:

            请根据提供的通话内容，填写完整的回访记录模板，并确保信息准确、简洁、易读。
            通话内容: ";
        $end = "请以纯文本和换行的情形帮我总结回访记录，字数不超过500个。";
        foreach ($data as $key => $value) {
            $value->summaryContent = $sf->chat_completions($first.$value['callContent'].$end.$value['timeConsume']);
            $value->save();
        }
        return sok('已操作'.count($data).'条数据');
    }



    private function msg($data)
    {
        return [
            'code' => true,
            'msg' => 'success',
            'data' => $data
        ];
    }

    public function request($path, $data = [])
    {
        $url = 'https://openapi.bdsaas.com/' . $path;
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        if ($data) {
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($curl);
        $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        curl_close($curl);
        if (!$response || $code != 200) {
            //错误强制返回
            return moerr('电话模块通讯失败，请联系管理员');
        }
        return json_decode($response, true);
    }
}